AWS CLIを使って一括でAWS Backup復旧ポイントの削除と既存のAWS Backup復旧ポイントの保持期間の変更を行う
前提
AWS Backupのバックアップルールで保持期間を変更しても、該当ルールで作成された既存の復旧ポイントの保持期間は変更されません。(新規に作成される復旧ポイントは変更後の保持期間が設定される)
古い復旧ポイントが残り続けるのを許容できない場合、既存の復旧ポイントに対して作業を行う必要があります。
具体的には、以下です。
- 古い復旧ポイントを削除
- 既存復旧ポイントの保持期間を変更
「2.」だけでも、保持期間を過ぎたら削除されるため、最終的な復旧ポイントの状態は同じです。
しかし、「2.」だけだと特定条件下でAWS Configの記録が余分に発生し課金増につながります。
以下の条件にあてはまる場合、「1.」も実施したほうが良いです。
- AWS Configの記録対象にAWS Backup 復旧ポイントが含まれている
- 変更後の保持期間を過ぎている復旧ポイントが大量に存在する
「1.」であれば、「変更後の保持期間を過ぎている復旧ポイント」に対しては、「復旧ポイント削除」の1回分の記録が発生します。
しかし、「2.」のみでは「変更後の保持期間を過ぎている復旧ポイント」に対して、「復旧ポイントの保持期間の変更」「復旧ポイントの削除」の2回分の記録が発生します。
コスト試算の例
- 前提
- 保持期間変更対象の復旧ポイントの数: 50,000
- 上記の内 すでに保持期間を過ぎている復旧ポイントの数: 25,000
- AWS Config東京リージョンで連続的な記録: 0.003USD/設定項目あたり
- コスト
- 「1.」「2.」実施時のAWS Config設定項目コスト: 150USD
- 古い復旧ポイントの削除: 75 USD = 25,000 * 0.003
- 既存の復旧ポイントの保持期間設定: 75 USD = (50,000 - 25,000) * 0.003
- 「2.」のみ実施時のAWS Config設定項目コスト: 225USD
- 既存の復旧ポイントの保持期間設定: 150 USD = 50,000 * 0.003
- 保持期間超過による古い復旧ポイントの自動削除:75 USD = 25,000 * 0.003
- 「1.」「2.」実施時のAWS Config設定項目コスト: 150USD
やってみた
マネジメントコンソールから復旧ポイントを複数選択して削除することは可能です。
1度に表示可能な復旧ポイントは100までとなっており、10,000件等大量に削除したい場合は辛いものがあります。
そのため、このブログではAWS CLIを使用した手順を紹介します。
1.古い復旧ポイントを削除する
まずは対象の復旧ポイントが何個あるか確認します。
リソースタイプDynamoDB
の180日以上前の復旧ポイントを対象にします。必要に応じて、--by-resource-type
や--by-created-before
を書き換えてください。
$ aws backup list-recovery-points-by-backup-vault \ --backup-vault-name <vault名> \ --by-resource-type "DynamoDB" \ # --by-created-before $(date -d "-180 days" +%Y-%m-%d) \ # Macだったら、「-d "-180 days"」の部分を「-v-180d」に変更 --query "length(RecoveryPoints[].RecoveryPointArn)"
MacとLinuxでdateコマンドに差異があるため、環境に応じて該当箇所を変更してください。
【備忘録】LinuxとMacでのdateコマンドの差異について #Linux - Qiita
削除を行います。以下のスクリプトを用意して、実行します。
#!/bin/bash vault_name=aft-controltower-backup-vault recovery_point_arns=$(aws backup list-recovery-points-by-backup-vault \ --backup-vault-name $vault_name \ --by-resource-type "DynamoDB" \ --by-created-before $(date -d "-180 days" +%Y-%m-%d) \ # Macだったら、「-d "-180 days"」の部分を「-v-180d」に変更 --query "RecoveryPoints[].RecoveryPointArn" --output text count=0 for recovery_point_arn in $recovery_point_arns; do COUNT=$((COUNT + 1)) echo "Deleting recovery point $COUNT: $recovery_point_arn" aws backup delete-recovery-point --backup-vault-name $vault_name --recovery-point-arn $recovery_point_arn done
実行結果は以下です。
$ ./delete_recovery_point.sh Deleting recovery point 1: <AWS Backup復旧ポイントARN> Deleting recovery point 2: <AWS Backup復旧ポイントARN> Deleting recovery point 3: <AWS Backup復旧ポイントARN>
2.既存復旧ポイントの保持期間を変更する
保持期間が永続の復旧ポイントを対象とします。
以下のコマンドで、対象の復旧ポイントが何個あるか確認できます。
aws backup list-recovery-points-by-backup-vault \ --backup-vault-name <vault名> \ --query "length(RecoveryPoints[?Lifecycle.DeleteAfterDays==null].RecoveryPointArn)"
保持期間の変更は以下のスクリプトを使用します。
#!/bin/bash vault_name=<vault名> recovery_point_arns=$(aws backup list-recovery-points-by-backup-vault \ --backup-vault-name $vault_name \ --query "RecoveryPoints[?Lifecycle.DeleteAfterDays==null].RecoveryPointArn" \ --output text) count=0 for recovery_point_arn in $recovery_point_arns; do COUNT=$((COUNT + 1)) echo "Update recovery point $COUNT: $recovery_point_arn" aws backup update-recovery-point-lifecycle --backup-vault-name $vault_name --recovery-point-arn $recovery_point_arn --lifecycle "DeleteAfterDays=180" > /dev/null done
実行結果は以下です。
$ ./update_lifecycle_recovery_point.sh Update recovery point lifecycle 1: <AWS Backup復旧ポイントARN> Update recovery point lifecycle 2: <AWS Backup復旧ポイントARN> Update recovery point lifecycle 3: <AWS Backup復旧ポイントARN>
おわりに
AWS CLIを使って、一括で復旧ポイントの削除や保持期間を変更する方法でした。
大量の復旧ポイントに対して、操作が必要な際に活用いただければと思います。
AWS ConfigでAWS Backup復旧ポイントを記録対象としていると、今回の操作時に操作対象の復旧ポイントが多い場合、それなりに課金が発生することがあるので気をつけてください。
以上、AWS事業本部の佐藤(@chari7311)でした。